草庐IT

OpenGL 波浪特效

全部标签

c++ - 维度不是 2^x 的 openGL 纹理

我正在尝试在openGL环境中显示图片。图片的原始尺寸为3648x2432,我想用256x384的图像显示它。问题是,384不是2的幂,当我尝试显示它时,它看起来被拉长了。我该如何解决? 最佳答案 我知道有三种方法-Albert建议的那个(调整大小直到适合)。将纹理segmentation为2**n大小的矩形,并以某种方式将它们拼接在一起。看看您是否可以使用GL_ARB_texture_non_power_of_two。不过,最好避免使用它,因为它看起来像是特定于Xorg的扩展。 关于c

c++ - 带有交错缓冲区的 openGL glDrawElements

到目前为止,我只使用了glDrawArrays,并且想转而使用索引缓冲区和索引三角形。我正在用纹理坐标、法线和顶点坐标绘制一个有点复杂的对象。所有这些数据都收集到一个交错的顶点缓冲区中,并使用类似于(假设所有serup已正确完成)的调用进行绘制:glVertexPointer(3,GL_FLOAT,22,(char*)m_vertexData);glNormalPointer(GL_SHORT,22,(char*)m_vertexData+(12));glTexCoordPointer(2,GL_SHORT,22,(char*)m_vertexData+(18));glDrawElem

c++ - OpenGL 中的视差映射故障

这是在将切线vector传输到顶点着色器后立即反转切线vector时的结果:“影子”放错地方了。(并且它仅在我通过Y轴旋转它时才起作用,所以最后一张图像似乎呈现出一个很好的视差映射立方体)我确定这不是切vector或纹理坐标问题因为我使用了与工作演示中完全相同的切线计算函数和完全相同的立方体位置、法线和纹理坐标数据。毕竟,我将带有position/texcoord/normal/tangent数据的数组导出到一个.txt文件中,我看到了我所期望的(我所期望的是与工作演示中相同的pos/tex/norm数据,包括计算出的切线我设法从工作演示中导出)。下一个论点是,我将我的着色器代码复制到

c++ - OpenGL:如何在不移动整个场景的情况下移动二维对象?

好吧,我正在尝试使用C++中的OpenGL重新创建经典的MissileCommand。这是我第一次涉足OpenGL,尽管此时我对C++感到相当满意。我认为我的第一个任务是弄清楚如何在屏幕上移动二维对象,这看起来相当简单。我创建了两个快速方法调用来制作三角形或四边形:voidmakeTriangle(color3ftheColor,vertex2f&p1,vertex2f&p2,vertex2f&p3,int&xOffset,int&yOffset){//atriangleglBegin(GL_POLYGON);glColor3f(theColor.red,theColor.green,

c++ - OpenGL:一个简单的过剩立方体没有光

OpenGL:简单的过剩立方体没有光嗨,我正在尝试研究opengl和glut中的灯光,但我很早就遇到了问题。我有这段代码,用于使用自定义相机设置在自定义位置制作发光立方体:voidtestApp::draw(){   staticfloatamb[]= {0.4,0.4,0.4,0.0};   staticfloatdif[]= {1.0,1.0,1.0,0.0};      floatlight_diffuse[]={1.0,0.0,1.0,1.0};   floatlight_position[]={-1.0,1.0,1.0,0.0};//itriedalotofpositions

c++ - 如何将QImage格式转换为OpenGL支持的格式

我正在使用QImage加载图像,然后将其用作OpenGL中的纹理。问题是颜色分量在QImage和OpenGL中有不同的顺序。目前我在OpenGL中使用GL_RGBA格式,在Qt中使用QImage::Format_ARGB32。因此,在OpenGL中创建纹理之前,我必须为加载图像的每个像素手动交换字节。此外,要正确交换字节,我需要知道机器的字节顺序。有人知道更好的解决方案吗?至少,有什么方法可以使这种转换与字节顺序无关吗?谢谢。 最佳答案 glTex(Sub)Image的最后三个参数定义了pixeltransfertoOpenGL发生

c++ - 为什么 OpenGL 雾只是不出现?

这就是我在OpenGL中启用雾的方式:floatfog_colour[4]={1,1,1,1};glEnable(GL_FOG);glFogf(GL_FOG_MODE,GL_EXP2);glFogfv(GL_FOG_COLOR,fog_colour);glFogf(GL_FOG_DENSITY,0.5);glHint(GL_FOG_HINT,GL_NICEST);glFogf(GL_FOG_START,0.1);glFogf(GL_FOG_END,100);每个物体都在0.1-100范围内,但是雾就是不出现,这是怎么回事? 最佳答案

c++ - 顶点缓冲区对象中的颜色 - DirectX 与 OpenGL

我正在开发一个小型游戏引擎。它的特点之一是它应该支持DirectX和OpenGL渲染。我正在使用顶点缓冲区对象,我有一个结构来定义我的顶点格式。问题是我希望能够对DirectX和OpenGL使用相同的结构,这样我就可以在不更改对象顶点的情况下从DirectX渲染组件切换到OpenGL渲染组件。这可能吗?目前,我正在为DirectX使用以下结构:structVertex{floatposition[3];//x,y,zfloatnormal[3];//nx,ny,nzDWORDcolour;//Thevertexcolorfloattexture[2];//u,v};连同:#define

c++ - OpenGL:在两个元素之间画线

我需要在我创建的两个网格之间画一条线。每个网格都与不同的模型矩阵相关联。我一直在考虑如何做到这一点,我想到了这个:glMatrixMode(GL_MODELVIEW);glLoadMatrixf(first_object_model_matrix);glBegin(GL_LINES);glVertex3f(0,0,0);//objectcoordglMatrixMode(GL_MODELVIEW);glLoadMatrixf(first_object_model_matrix);glVertex3f(0,0,0);//endingpointofthelineglEnd();但问题是我无

c++ - 在 OpenGL 中构建网格

我正在做一些OpenGL(2.1)测试,在尝试制作一个简单的立方体时,我想知道如何制作复杂的网格。对于我的立方体,我只是用GL_TRIANGLES手动设置每个顶点。但是我不知道如何在循环中制作相同的东西。因为顶点的顺序,因为有这么多重复的顶点!我真的必须通过设置3个顶点“一次”(对于两个三角形)来制作一张脸吗?那似乎很慢。如何优化?制作/加载网格的技术是什么?哦,我会很感激一些例子。 最佳答案 杰森·格雷戈里(JasonGregory)的《游戏引擎架构》一书为您的问题提供了答案。这是它说的:Theeasiestwaytodefine